#include "TestRecursoAlmacenamiento.h"
#include "../src/recursoDeAlmacenamiento/FabricaRecursosAlmacenamiento.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamiento.h"
#include "../src/estrategiaAlmacenamiento/EstrategiaAlmacenamientoBloques.h"
#include "../src/FuncionesUtiles.h"
#include "../src/estrategiaRecurso/Archivo.h"
#include "../src/estrategiaAlmacenamiento/Iterador.h"

TestRecursoAlmacenamiento::TestRecursoAlmacenamiento() {
	path = "./Archivos/bloques";
	system("rm ./Archivos/bloques*");
	this->tamanioBloque = 30;
	this->recurso = FabricaRecursosAlmacenamiento::getFabrica()->crearRecursoArchivoBloques(path, tamanioBloque, DIFERIDA, FABRICA_BLOQUES_COMPRIMIDOS);

}

TestRecursoAlmacenamiento::~TestRecursoAlmacenamiento() {
	delete recurso;
}

void TestRecursoAlmacenamiento::run() {

	Bytes dato1("dato1");
	Bytes dato2("dato2");
	Bytes dato3("dato3");
	Bytes dato4("dato4");
	Bytes dato5("dato5");
	recurso->guardar(dato1);
	recurso->guardar(dato2);
	recurso->guardar(dato3);

	recurso->imprimirBuffer();

	recurso->guardar(dato4);
	recurso->guardar(dato5);

	recurso->imprimirBuffer();


	Iterador* iterador = recurso->getIterador();

	assert(iterador->tieneSiguiente() == true, "Prueba ver si tiene siguiente 1");
	assert(iterador->getSiguiente().toString() == "dato1", "Prueba leer dato 1");

	assert(iterador->tieneSiguiente() == true, "Prueba ver si tiene siguiente 2");
	assert(iterador->getSiguiente().toString() == "dato2", "Prueba leer dato 2");

	assert(iterador->tieneSiguiente() == true, "Prueba ver si tiene siguiente 3");
	assert(iterador->getSiguiente().toString() == "dato3", "Prueba leer dato 3");

	assert(iterador->tieneSiguiente() == true, "Prueba ver si tiene siguiente 4");
	assert(iterador->getSiguiente().toString() == "dato4", "Prueba leer dato 4");

	assert(iterador->tieneSiguiente() == true, "Prueba ver si tiene siguiente 5");
	assert(iterador->getSiguiente().toString() == "dato5", "Prueba leer dato 5");

	assert(iterador->tieneSiguiente() == false, "Prueba ver si tiene siguiente 6");

	delete iterador;
}

